#ifndef GeneradorIndice_H
#define GeneradorIndice_H

#include <stdbool.h>
#include <stddef.h>
#include "abb.h"
#include "ManejadorArchivos.h"
#include "Parser.h"
#include "ElementoParseado.h"
#include "Ubicador.h"
#include "vector_dinamico.h"

/* *****************************************************************
 *                			CONSTANTES
 * *****************************************************************/

#define CANT_ARCH 36
#define NOMBRES_ARCH { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i' , 'j', \
						'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's' , 't', \
						'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2' , '3', \
						'4', '5', '6', '7', '8', '9' }  


/* *****************************************************************
 *                DEFINICION DE LOS TIPOS DE DATOS
 * *****************************************************************/

typedef struct _GeneradorIndice GeneradorIndice_t;

/* *****************************************************************
 *                    PRIMITIVAS DEL GeneradorIndice
 * *****************************************************************/

// Crea un GeneradorIndice.
// Pre: 'nombreDelArchivo' es la ruta al archivo a indexar.
// Post: Devuelve un GeneradorIndice o NULL en caso de error.
GeneradorIndice_t* GeneradorIndice_crear (char* nombreDelArchivo, int numeroDelArchivo);

// Indiza el archivo.
// Post: Se creó un archivo de extensión .ind con el nombre que se
// pasó por parámetro en la creación del generador y se devuelve true
// si el proceso fue exitoso. False, en caso contrario.
bool GeneradorIndice_indexar (GeneradorIndice_t* indice);

// Devuelve un vector de CANT_ARCH posiciones con las rutas correspondientes
// a los léxicos del índice.
vector_dinamico_t* GeneradorIndice_verRutasLexico (GeneradorIndice_t* indice);

// Devuelve un vector de CANT_ARCH posiciones con las rutas correspondientes
// a los datos del índice.
vector_dinamico_t* GeneradorIndice_verRutasDatos (GeneradorIndice_t* indice);

// Destruye el GeneradorIndice.
void GeneradorIndice_destruir (GeneradorIndice_t * indice);
//provisorio
char* crear_string_direccion (char letra, char* tipo, char* direccion, char* ext);

#endif //  GeneradorIndice_H
